TEST12138

TEST12138

长路漫漫,唯心作伴。

前端js之&&和||

不要百度和写代码测试
第一个问题,下面这两行代码的输出是什么

console.log(1<2 && 4>5)
console.log(1<2 || 4>5)

第二个问题,下面这两行代码的输出又是什么

console.log(2 && 4)
console.log(2 || 4)

如果说你对这样的问题不清楚的话,说明你对 && 和 || 的运算流程是不清楚的
它们的运算流程是什么呢
看下面这张图

image

比如说console.log(2 && 4)2 和 4 都是 true

console.log( 2   &&  4  )
            true && true

返回的结果是最后判定的那一个的数据,4 是后判定的,所以返回的是 4
验证一下

image

console.log(2 || 4)怎么算呢
也是先做判定,2 是 true,|| 运算只要一个为真就行,这样就不用判定后面的 4 了
因为返回的结果是最后判定的那一个的数据,所以返回的是 2
验证一下

image

那么在实际开发的时候怎么用呢

比如说我们这里有个对象
var obj = {}
假设它是从其它什么地方来的,你也不知道这对象里有哪些属性
我们现在要从这个对象里读一个属性 a
我的需求是如果 a 有值就读 a,如果没有值就给个默认值
正常写的话就会写成这样

var a = obj.a
if(!a) {
  a='default'
}

用 || 写的话,只需要

var a = obj.a || 'default'

代码简洁许多
根据判定流程,obj.a 有值的话,返回是 true,返回的结果是最后判定的那一个的数据,所以 a = obj.a
obj.a 没有值的话,会继续判定后面的,'default' 返回是 true,所以 a = 'default'

再比如说,我们想知道 obj 里有没有一个函数,有的话就调用它
常规写法就是

if(obj.func) {
  obj.func()
}

用 && 写的话就是

obj.func && obj.func()

这个大家可以自己想想

Loading...
Ownership of this post data is guaranteed by blockchain and smart contracts to the creator alone.